'use strict';

const Controller = require('egg').Controller;

class UserController extends Controller {
  // 注册接口
  async reg() {
    const { app, ctx } = this;
    // 首先验证注册信息
    const { username, nickname, cellphone, password, confirmPassword } = ctx.request.body;
    ctx.validate({
      username: 'string',
      nickname: 'string?',
      cellphone: 'string',
      password: 'password',
      confirmPassword: 'password',
    });
    if (password !== confirmPassword) {
      ctx.status = 422;
      ctx.fail('确认密码不一致');
    }
    // 查询手机号是否已经注册过
    const samePhoneResult = await app.mysql.get('user', {
      cellphone,
    });
    console.log(samePhoneResult, '---');
    if (samePhoneResult !== null) {
      ctx.fail('手机号已经注册');
      return;
    }
    // 然后存储数据
    const regResult = await app.mysql.insert('user', {
      username,
      nickname,
      cellphone,
      password: ctx.helper.sha256(password),
    });
    if (regResult.affectedRows === 1) {
      ctx.success('注册成功');
      return;
    }
  }
  // 登录函数
  async login() {
    const { app, ctx } = this;
    // 首先验证注册信息
    const { cellphone, password } = ctx.request.body;
    ctx.validate({
      cellphone: 'string',
      password: 'password',
    });
    // 查询手机号是否已经注册过
    const samePhoneResult = await app.mysql.get('user', {
      cellphone,
    });
    if (samePhoneResult === null) {
      ctx.fail('手机号未注册');
      return;
    }

    if (samePhoneResult.password !== ctx.helper.sha256(password)) {
      ctx.status = 401;
      ctx.fail('密码验证错误');
      return;
    }
    // 当密码验证成功
    // 产生token存储
    const token = app.jwt.sign(JSON.parse(JSON.stringify(samePhoneResult)), app.config.jwt.secret);
    const updateTokenResult = await app.mysql.update('user', {
      token,
    }, {
      where: {
        id: samePhoneResult.id,
      },
    });
    if (updateTokenResult.affectedRows === 1) {
      ctx.success('登录成功', { token });
    } else {
      ctx.statue = 500;
      ctx.fail('登录失败');
    }
    // 查询数据

  }
}
module.exports = UserController;
